
package com.fejal.dao;

import java.util.List;
import com.fejal.bean.Pessoa;


public class PessoaDAOHibernate implements PessoaDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Pessoa> hibernateDAO = null;

	
	public PessoaDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getPessoaDao();
	}

	@Override
	public boolean inserir(Pessoa pessoa) throws Exception  {
		boolean ok = false;

		try {
			hibernateDAO.add(pessoa);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public boolean alterar(Pessoa pessoa) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.update(pessoa);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public boolean excluir(Pessoa pessoa) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.remove(pessoa);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public Pessoa getPessoa(int codigoPessoa) {
		Pessoa pessoa = hibernateDAO.get(codigoPessoa); 
		return pessoa;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Pessoa> getSelecionar(String codigoPessoa, String cpf, String rg, String nome) {
		
		String 	sql = "FROM Pessoa WHERE codigoPessoa <> 0 ";

		if (!(codigoPessoa.isEmpty())) {
			sql += "AND codigoPessoa = '" + codigoPessoa + "' ";  
		}
		
		if (!(cpf.isEmpty())) {
			sql += "AND cpf = '" + cpf + "' ";  
		}
		
		if (!(rg.isEmpty())) {
			sql += "AND rg.numeroRG = '" + rg + "' ";  
		}
		
		if (!(nome.isEmpty())) {
			sql += "AND nome like '" + nome + "%' ";
  
		}
		
		sql += "ORDER BY nome";
		
		
		List<Pessoa> lista = hibernateDAO.getSession().createQuery(sql).setMaxResults(100).setFetchSize(1).list();
	
		return lista;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(Pessoa pessoa) {
		// SQL para verificar se a pessoa existe
		String 	sql = 	"FROM Pessoa WHERE codigoPessoa <> "+pessoa.getCodigoPessoa()+" AND "+
				 		" ( CPF = '"+pessoa.getCPF()+"' OR" +
						" (rg.numeroRG = '"+pessoa.getRg().getNumeroRG()+"' AND " +
						"  UFRG = '"+pessoa.getRg().getUFRG()+"'))";

		List<Pessoa> lista = hibernateDAO.getSession().createQuery(sql).list();
		if(lista.size()<1){
			return false;
		} else {
			return true;
		}
	}

	@Override
	public Pessoa getPessoa(String CPF) {
		String 	sql = "FROM Pessoa WHERE codigoPessoa <> 0 ";
				sql += "AND cpf = '" + CPF + "' ";  
				
        Pessoa pessoa = (Pessoa) hibernateDAO.getSession().createQuery(sql).uniqueResult();				

		return pessoa;
	}
}
